library(tidyverse, warn.conflicts = FALSE)
── Attaching packages ────────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 3.0.0     ✔ purrr   0.2.5
✔ tibble  1.4.2     ✔ dplyr   0.7.6
✔ tidyr   0.8.1     ✔ stringr 1.3.1
✔ readr   1.1.1     ✔ forcats 0.3.0
── Conflicts ───────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
theme_set(theme_bw())

Os dados

gastos_bruto = read_csv("../dados/ano-atual.csv", progress = FALSE)
Parsed with column specification:
cols(
  .default = col_integer(),
  sgPartido = col_character(),
  txtCNPJCPF = col_character(),
  vlrGlosa = col_double(),
  txNomeParlamentar = col_character(),
  sgUF = col_character(),
  vlrDocumento = col_double(),
  txtDescricaoEspecificacao = col_character(),
  datEmissao = col_datetime(format = ""),
  txtDescricao = col_character(),
  txtNumero = col_character(),
  txtFornecedor = col_character(),
  vlrLiquido = col_double(),
  txtPassageiro = col_character(),
  txtTrecho = col_character(),
  vlrRestituicao = col_character()
)
See spec(...) for full column specifications.
gastos = gastos_bruto %>% 
  mutate(txtDescricao = ifelse(txtDescricao == "Emissão Bilhete Aéreo", 
                               "PASSAGENS AÉREAS", 
                               txtDescricao))

Gastos ao longo do tempo

gastos.por.mes = gastos %>% 
  filter(numMes < 6) %>% 
  group_by(numMes, txtDescricao) %>% 
  summarize(total = sum(vlrDocumento) / 1e6) 
ggplot(gastos.por.mes, aes(x = numMes, y = total, colour = txtDescricao)) +
  labs(x = "Mês de 2016", y = "Gastos em Milhões") +
  geom_line()

library(directlabels)
ggplot(gastos.por.mes, aes(x = numMes, y = total, colour = txtDescricao)) +
  labs(x = "Mês de 2016", y = "Gastos em Milhões") +
  geom_line() + 
  theme(legend.position="none") + 
  geom_dl(aes(label = txtDescricao), method = "last.points", cex = 0.5) + 
  xlim(1, 10)

ggplot(gastos.por.mes, aes(x = numMes, y = total, colour = txtDescricao)) +
  labs(x = "Mês de 2016", y = "Gastos em Milhões") +
  geom_line() + 
  facet_wrap(~ txtDescricao, ncol = 4) + 
  theme(legend.position="none", strip.text.x = element_text(hjust = 0, size = 8))

E por dia?

library(lubridate)

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date
gastos.por.dia = gastos %>% 
  filter(numMes < 6) %>% 
  mutate(dia = day(datEmissao)) %>% 
  group_by(dia, txtDescricao) %>% 
  summarize(total = sum(vlrDocumento) / 1e3) %>% # Em milhares
  mutate(txtDescricao = as.factor(txtDescricao))
Unequal factor levels: coercing to characterbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vector
ggplot(gastos.por.dia, aes(x = dia, y = total, colour = txtDescricao)) +
  labs(x = "Mês de 2016", y = "Gastos em Milhões") +
  geom_line() + 
  facet_wrap(~ txtDescricao, ncol = 4) + 
  theme(legend.position="none", strip.text.x = element_text(hjust = 0, size = 8))

E por dia e mês?

gastos.dia.mes = gastos %>% 
  filter(numMes < 6) %>% 
  mutate(dia = day(datEmissao)) %>% 
  group_by(dia, numMes, txtDescricao) %>% 
  summarize(total = sum(vlrDocumento) / 1e3) %>% # Em milhares
  mutate(txtDescricao = as.factor(txtDescricao))
Unequal factor levels: coercing to characterbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vectorbinding character and factor vector, coercing into character vector
ggplot(gastos.dia.mes, aes(x = dia, y = total, colour = txtDescricao, group = numMes)) +
  labs(x = "Mês de 2016", y = "Gastos em milhares de R$") +
  geom_line() + 
  facet_wrap(~ txtDescricao, ncol = 4) + 
  theme(legend.position="none", strip.text.x = element_text(hjust = 0, size = 8))

ggplot(gastos.dia.mes, aes(x = dia, y = total, colour = txtDescricao, group = numMes)) +
  labs(x = "Mês de 2016", y = "Gastos em milhares de R$") +
  geom_line(alpha = .5) + 
  facet_wrap(~ txtDescricao, ncol = 4) + 
  theme(legend.position="none", strip.text.x = element_text(hjust = 0, size = 8))

Ordenar sempre ajuda a leitura

media.mensal = gastos %>% 
  filter(numMes<6) %>%
  group_by(sgUF, txNomeParlamentar) %>% 
  summarize(media = mean(vlrDocumento))
estados = media.mensal %>% 
  group_by(sgUF) %>% 
  summarise(media = mean(media))
(ggplot(media.mensal, mapping = aes(x = sgUF, y = media, colour = sgUF)) +
  geom_point(aes(label = txNomeParlamentar), position = position_jitter(width = 0.25), alpha = 0.4, na.rm = TRUE)+
  theme(legend.position="none") + 
  geom_point(data = estados, colour = "black", size = 1.5, shape = 18) +
  labs( y ="media de gasto mensal", x= "Estado")) %>%
  ggplotly()
Ignoring unknown aesthetics: label

media.mensal = left_join(media.mensal, estados, by = c("sgUF"))
names(media.mensal) = c("sgUF", "txNomeParlamentar", "media", "media.estado")
ggplot(media.mensal, mapping = aes(x = reorder(sgUF, -media.estado), y = media, colour = sgUF))+
  geom_point(position = position_jitter(width = 0.25), alpha = 0.4, na.rm = TRUE)+
  theme(legend.position="none") + 
  geom_point(data = estados, aes(x = sgUF, y = media), colour = "black", size = 1.5, shape = 18) +
  labs( y ="media de gasto mensal", x= "Estado")

ggplotly(ggplot(media.mensal, mapping = aes(x = reorder(sgUF, -media.estado), y = media, colour = sgUF))+
  geom_violin(alpha = 0.3) + 
  geom_point(position = position_jitter(width = 0.25), alpha = 0.4, na.rm = TRUE)+
  theme(legend.position="none") + 
  geom_point(data = estados, aes(x = sgUF, y = media), colour = "black", size = 1.5, shape = 18) +
  labs( y ="media de gasto mensal", x= "Estado"))

LS0tCnRpdGxlOiAiRGljYXMgZGUgdmlzdWFsaXphY2FvIgphdXRob3I6ICJOYXphcmVubyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogeWV0aQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIGZpZ193aWR0aDogNQogICAgZmlnX2hlaWdodDogNAplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSwgd2Fybi5jb25mbGljdHMgPSBGQUxTRSkKdGhlbWVfc2V0KHRoZW1lX2J3KCkpCmBgYAoKT3MgZGFkb3MKCmBgYHtyfQpnYXN0b3NfYnJ1dG8gPSByZWFkX2NzdigiLi4vZGFkb3MvYW5vLWF0dWFsLmNzdiIsIHByb2dyZXNzID0gRkFMU0UpCmdhc3RvcyA9IGdhc3Rvc19icnV0byAlPiUgCiAgbXV0YXRlKHR4dERlc2NyaWNhbyA9IGlmZWxzZSh0eHREZXNjcmljYW8gPT0gIkVtaXNzw6NvIEJpbGhldGUgQcOpcmVvIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTU0FHRU5TIEHDiVJFQVMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dERlc2NyaWNhbykpCmBgYAoKIyBHYXN0b3MgYW8gbG9uZ28gZG8gdGVtcG8KCmBgYHtyfQpnYXN0b3MucG9yLm1lcyA9IGdhc3RvcyAlPiUgCiAgZmlsdGVyKG51bU1lcyA8IDYpICU+JSAKICBncm91cF9ieShudW1NZXMsIHR4dERlc2NyaWNhbykgJT4lIAogIHN1bW1hcml6ZSh0b3RhbCA9IHN1bSh2bHJEb2N1bWVudG8pIC8gMWU2KSAKCmdncGxvdChnYXN0b3MucG9yLm1lcywgYWVzKHggPSBudW1NZXMsIHkgPSB0b3RhbCwgY29sb3VyID0gdHh0RGVzY3JpY2FvKSkgKwogIGxhYnMoeCA9ICJNw6pzIGRlIDIwMTYiLCB5ID0gIkdhc3RvcyBlbSBNaWxow7VlcyIpICsKICBnZW9tX2xpbmUoKQoKbGlicmFyeShkaXJlY3RsYWJlbHMpCmdncGxvdChnYXN0b3MucG9yLm1lcywgYWVzKHggPSBudW1NZXMsIHkgPSB0b3RhbCwgY29sb3VyID0gdHh0RGVzY3JpY2FvKSkgKwogIGxhYnMoeCA9ICJNw6pzIGRlIDIwMTYiLCB5ID0gIkdhc3RvcyBlbSBNaWxow7VlcyIpICsKICBnZW9tX2xpbmUoKSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsgCiAgZ2VvbV9kbChhZXMobGFiZWwgPSB0eHREZXNjcmljYW8pLCBtZXRob2QgPSAibGFzdC5wb2ludHMiLCBjZXggPSAwLjUpICsgCiAgeGxpbSgxLCAxMCkKCgpnZ3Bsb3QoZ2FzdG9zLnBvci5tZXMsIGFlcyh4ID0gbnVtTWVzLCB5ID0gdG90YWwsIGNvbG91ciA9IHR4dERlc2NyaWNhbykpICsKICBsYWJzKHggPSAiTcOqcyBkZSAyMDE2IiwgeSA9ICJHYXN0b3MgZW0gTWlsaMO1ZXMiKSArCiAgZ2VvbV9saW5lKCkgKyAKICBmYWNldF93cmFwKH4gdHh0RGVzY3JpY2FvLCBuY29sID0gNCkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gOCkpCgpgYGAKCkUgcG9yIGRpYT8gCgpgYGB7cn0KbGlicmFyeShsdWJyaWRhdGUpCmdhc3Rvcy5wb3IuZGlhID0gZ2FzdG9zICU+JSAKICBmaWx0ZXIobnVtTWVzIDwgNikgJT4lIAogIG11dGF0ZShkaWEgPSBkYXkoZGF0RW1pc3NhbykpICU+JSAKICBncm91cF9ieShkaWEsIHR4dERlc2NyaWNhbykgJT4lIAogIHN1bW1hcml6ZSh0b3RhbCA9IHN1bSh2bHJEb2N1bWVudG8pIC8gMWUzKSAlPiUgIyBFbSBtaWxoYXJlcwogIG11dGF0ZSh0eHREZXNjcmljYW8gPSBhcy5mYWN0b3IodHh0RGVzY3JpY2FvKSkKCmdncGxvdChnYXN0b3MucG9yLmRpYSwgYWVzKHggPSBkaWEsIHkgPSB0b3RhbCwgY29sb3VyID0gdHh0RGVzY3JpY2FvKSkgKwogIGxhYnMoeCA9ICJNw6pzIGRlIDIwMTYiLCB5ID0gIkdhc3RvcyBlbSBNaWxow7VlcyIpICsKICBnZW9tX2xpbmUoKSArIAogIGZhY2V0X3dyYXAofiB0eHREZXNjcmljYW8sIG5jb2wgPSA0KSArIAogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsIHNpemUgPSA4KSkKCmBgYAoKRSBwb3IgZGlhIGUgbcOqcz8gCgpgYGB7cn0KZ2FzdG9zLmRpYS5tZXMgPSBnYXN0b3MgJT4lIAogIGZpbHRlcihudW1NZXMgPCA2KSAlPiUgCiAgbXV0YXRlKGRpYSA9IGRheShkYXRFbWlzc2FvKSkgJT4lIAogIGdyb3VwX2J5KGRpYSwgbnVtTWVzLCB0eHREZXNjcmljYW8pICU+JSAKICBzdW1tYXJpemUodG90YWwgPSBzdW0odmxyRG9jdW1lbnRvKSAvIDFlMykgJT4lICMgRW0gbWlsaGFyZXMKICBtdXRhdGUodHh0RGVzY3JpY2FvID0gYXMuZmFjdG9yKHR4dERlc2NyaWNhbykpCgpnZ3Bsb3QoZ2FzdG9zLmRpYS5tZXMsIGFlcyh4ID0gZGlhLCB5ID0gdG90YWwsIGNvbG91ciA9IHR4dERlc2NyaWNhbywgZ3JvdXAgPSBudW1NZXMpKSArCiAgbGFicyh4ID0gIk3DqnMgZGUgMjAxNiIsIHkgPSAiR2FzdG9zIGVtIG1pbGhhcmVzIGRlIFIkIikgKwogIGdlb21fbGluZSgpICsgCiAgZmFjZXRfd3JhcCh+IHR4dERlc2NyaWNhbywgbmNvbCA9IDQpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIiwgc3RyaXAudGV4dC54ID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCwgc2l6ZSA9IDgpKQoKZ2dwbG90KGdhc3Rvcy5kaWEubWVzLCBhZXMoeCA9IGRpYSwgeSA9IHRvdGFsLCBjb2xvdXIgPSB0eHREZXNjcmljYW8sIGdyb3VwID0gbnVtTWVzKSkgKwogIGxhYnMoeCA9ICJNw6pzIGRlIDIwMTYiLCB5ID0gIkdhc3RvcyBlbSBtaWxoYXJlcyBkZSBSJCIpICsKICBnZW9tX2xpbmUoYWxwaGEgPSAuNSkgKyAKICBmYWNldF93cmFwKH4gdHh0RGVzY3JpY2FvLCBuY29sID0gNCkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLCBzaXplID0gOCkpCgpgYGAKCgojIE9yZGVuYXIgc2VtcHJlIGFqdWRhIGEgbGVpdHVyYQoKYGBge3J9Cm1lZGlhLm1lbnNhbCA9IGdhc3RvcyAlPiUgCiAgZmlsdGVyKG51bU1lczw2KSAlPiUKICBncm91cF9ieShzZ1VGLCB0eE5vbWVQYXJsYW1lbnRhcikgJT4lIAogIHN1bW1hcml6ZShtZWRpYSA9IG1lYW4odmxyRG9jdW1lbnRvKSkKCmVzdGFkb3MgPSBtZWRpYS5tZW5zYWwgJT4lIAogIGdyb3VwX2J5KHNnVUYpICU+JSAKICBzdW1tYXJpc2UobWVkaWEgPSBtZWFuKG1lZGlhKSkKCihnZ3Bsb3QobWVkaWEubWVuc2FsLCBtYXBwaW5nID0gYWVzKHggPSBzZ1VGLCB5ID0gbWVkaWEsIGNvbG91ciA9IHNnVUYpKSArCiAgZ2VvbV9wb2ludChhZXMobGFiZWwgPSB0eE5vbWVQYXJsYW1lbnRhciksIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC4yNSksIGFscGhhID0gMC40LCBuYS5ybSA9IFRSVUUpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsgCiAgZ2VvbV9wb2ludChkYXRhID0gZXN0YWRvcywgY29sb3VyID0gImJsYWNrIiwgc2l6ZSA9IDEuNSwgc2hhcGUgPSAxOCkgKwogIGxhYnMoIHkgPSJtZWRpYSBkZSBnYXN0byBtZW5zYWwiLCB4PSAiRXN0YWRvIikpICU+JQogIGdncGxvdGx5KCkKCm1lZGlhLm1lbnNhbCA9IGxlZnRfam9pbihtZWRpYS5tZW5zYWwsIGVzdGFkb3MsIGJ5ID0gYygic2dVRiIpKQpuYW1lcyhtZWRpYS5tZW5zYWwpID0gYygic2dVRiIsICJ0eE5vbWVQYXJsYW1lbnRhciIsICJtZWRpYSIsICJtZWRpYS5lc3RhZG8iKQoKZ2dwbG90KG1lZGlhLm1lbnNhbCwgbWFwcGluZyA9IGFlcyh4ID0gcmVvcmRlcihzZ1VGLCAtbWVkaWEuZXN0YWRvKSwgeSA9IG1lZGlhLCBjb2xvdXIgPSBzZ1VGKSkrCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuMjUpLCBhbHBoYSA9IDAuNCwgbmEucm0gPSBUUlVFKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArIAogIGdlb21fcG9pbnQoZGF0YSA9IGVzdGFkb3MsIGFlcyh4ID0gc2dVRiwgeSA9IG1lZGlhKSwgY29sb3VyID0gImJsYWNrIiwgc2l6ZSA9IDEuNSwgc2hhcGUgPSAxOCkgKwogIGxhYnMoIHkgPSJtZWRpYSBkZSBnYXN0byBtZW5zYWwiLCB4PSAiRXN0YWRvIikKCgpnZ3Bsb3RseShnZ3Bsb3QobWVkaWEubWVuc2FsLCBtYXBwaW5nID0gYWVzKHggPSByZW9yZGVyKHNnVUYsIC1tZWRpYS5lc3RhZG8pLCB5ID0gbWVkaWEsIGNvbG91ciA9IHNnVUYpKSsKICBnZW9tX3Zpb2xpbihhbHBoYSA9IDAuMykgKyAKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC4yNSksIGFscGhhID0gMC40LCBuYS5ybSA9IFRSVUUpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsgCiAgZ2VvbV9wb2ludChkYXRhID0gZXN0YWRvcywgYWVzKHggPSBzZ1VGLCB5ID0gbWVkaWEpLCBjb2xvdXIgPSAiYmxhY2siLCBzaXplID0gMS41LCBzaGFwZSA9IDE4KSArCiAgbGFicyggeSA9Im1lZGlhIGRlIGdhc3RvIG1lbnNhbCIsIHg9ICJFc3RhZG8iKSkKCmBgYAoKIyAKCmBgYHtyfQoKYGBgCgo=